import { Vmp, VmpEntity } from './interface'
import { Poll, VmpMember } from './interface'
import { Mt } from '@/api/manager/mt'

export interface InitVmpOption {
	/** 弹窗是否打开 */
	isOpen: boolean
	/** 画面合成数据 */
	data: Vmp
	isShowPlanOperateModal: boolean
	batchMembers: Mt[]
	/**批量轮询列表*/
	_pollMembers: Mt[]
	/**轮询方弹框是否打开 */
	pollModalIsOpen: boolean
	localStoragePreName: string
	vmpParamsName: string
	vmpState: number
	poll_select_mt_key: string
	PollPlanDetail: Poll | null
	memberList: VmpMember[]
	callingMap: { [key: string]: { timeout: NodeJS.Timeout; isCall: boolean } }
	mt_info?: Mt
}
export type VmpStateType = InitVmpOption & {
	/** 当前是否处于开启状态 */
	_isStart: boolean
	/** 当前是否处于编辑状态 */
	_isEdit: boolean
	/** 记录先前数据，用于恢复 */
	_preData: VmpEntity | null
	/** 记录接口下参后，收到推送是否需要提示 */
	_message_flag: string
}
export type VmpStore = VmpStateType & {
	update: (d: Partial<VmpStateType>) => void
	updateData: (d: Vmp | null) => void
	msgHandle: (d: VmpEntity) => Promise<void>
	reset: () => void
	onClose: () => void
	onInit: () => void
	setCalling: (mtKey: string) => void
	/**设置缓存数据*/
	_setSessionStage: (para: VmpEntity | undefined | null) => void
	/**获取缓存数据*/
	_getSessionStage: () => VmpEntity
	/**获取缓存数据当中的name*/
	_getStageName: () => string
	/**表示接口数据变成Vmp数据*/
	_translateVmpParamsToStartVmp: (para: VmpEntity) => Vmp
	/**表示外部获取画面合成参数 */
	_fetchVmpParams: (
		callback: (callback_param: VmpEntity | undefined) => void,
		errorCallBack: () => void
	) => Promise<void>
	/**表示外部引用会议画面合成开始画面合成 */
	_start: (_para: VmpEntity, vmpMt?: { mt_id: string; name?: string }) => Promise<void>
	/**表示外部引用会议画面合成停止画面合成 */
	_stop: (mtInfo?: { mt_key: string; mt_id: string }) => Promise<void>
	_getDefaultData: () => VmpEntity
	_messageInfo: (state?: 0 | 1) => void
}
